// 可以正常实现递归，虽然递归执行时都用到了a,b，但是函数的执行过程时的变量a,b和函数定义时的变量a,b是两回事。递归时不会造成重定义。重定义时语法分析时进行检查的，递归是运行时的独立空间，两者没有关系。

// 我们当前的符号表是进行覆盖刷新的，当两个函数中定义了相同的变量，利用符号表刷新机制，虽然不会报错也可以正常运行，但这只是符合我们虚拟机的标准。这也限制了我们的程序最多只能有两个作用域，一个全局一个局部

int fun(int a){
    int b;
    b = 1;
    if(a == 1){
        return 1;
    }
    else{
        a = a - 1;
        return fun(a) + b;
    }
}
int main(){
   int a;
   a = 2;
   printf("%d", fun(a));
}